/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package erp.financeiro;

import erp.financeiro.dao.ContratoDAO;
import erp.financeiro.dao.OrcamentoDAO;
import erp.financeiro.dao.TransacaoDAO;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author luiz.vieira
 */

public class VerificadorDeTransacoes implements Serializable {
    private static final long serialVersionUID = 1L;

    private List<Orcamento> orcamentos;
    private List<Contrato> contratos;

    public void lancaContratos(){
        Date hoje = new Date();
        Calendar dataNormalizada = new GregorianCalendar();
        dataNormalizada.set(2000, 01, hoje.getDay());
        contratos = ContratoDAO.getContratos(EstadoContrato.VIGENTE, TipoDeVencimentoContrato.ANUAL , null, null, null, null, dataNormalizada.getTime());
        for (Contrato contrato : contratos) {
            if (contrato.getUltimoLancamento().before(hoje))
            {
                Transacao transacao = new Transacao();
                transacao.setCriacao(hoje);
                transacao.setDadosBancarios(contrato.getDadosBancarios());
                transacao.setDescricao(contrato.getDescricao());
                transacao.setModulo(Modulos.FINANCEIRO);
                transacao.setMulta(0.0);
                transacao.setPagamento(null);
                transacao.setStatus(StatusTransacao.PENDENTE);
                transacao.setTipo(TipoTransacao.RECEBIMENTO);
                transacao.setUsuario(null);
                transacao.setValor(contrato.getValorPorVencimento());
                transacao.setVencimento(hoje);

                SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
                String vencimento = format.format(transacao.getVencimento());
                try {
                    TransacaoDAO.cadastrar(transacao.getDadosBancarios().getId().toString(), transacao.getTipo(), false, transacao.getDescricao(), vencimento, transacao.getValor(), transacao.getMulta(), Modulos.FINANCEIRO);
                } catch (Exception ex) {
                    Logger.getLogger(VerificadorDeTransacoes.class.getName()).log(Level.SEVERE, null, ex);
                }
             }
        }
        dataNormalizada.set(2000, hoje.getMonth(), hoje.getDay());
        contratos = ContratoDAO.getContratos(EstadoContrato.VIGENTE, TipoDeVencimentoContrato.MENSAL , null, null, null, null, dataNormalizada.getTime());
        for (Contrato contrato2 : contratos) {
            if (contrato2.getUltimoLancamento().before(hoje))
            {
                Transacao transacao = new Transacao();
                transacao.setCriacao(hoje);
                transacao.setDadosBancarios(contrato2.getDadosBancarios());
                transacao.setDescricao(contrato2.getDescricao());
                transacao.setModulo(Modulos.FINANCEIRO);
                transacao.setMulta(0.0);
                transacao.setPagamento(null);
                transacao.setStatus(StatusTransacao.PENDENTE);
                transacao.setTipo(TipoTransacao.RECEBIMENTO);
                transacao.setUsuario(null);
                transacao.setValor(contrato2.getValorPorVencimento());
                transacao.setVencimento(hoje);

                SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
                String vencimento = format.format(transacao.getVencimento());
                try {
                    TransacaoDAO.cadastrar(transacao.getDadosBancarios().getId().toString(), transacao.getTipo(), false, transacao.getDescricao(), vencimento, transacao.getValor(), transacao.getMulta(), Modulos.FINANCEIRO);
                } catch (Exception ex) {
                    Logger.getLogger(VerificadorDeTransacoes.class.getName()).log(Level.SEVERE, null, ex);
                }
             }

        }

    }

    //Fazer o cadastro de orcamentos
    //
    public void lancaOrcamentos(){
        Date hoje = new Date();
        orcamentos = OrcamentoDAO.getOrcamentos(EstadoOrcamento.APROVADO, hoje, null, null);
        for (Orcamento orcamento : orcamentos) {
            if (orcamento.getUltimoLancamento().before(hoje))
            {
                Transacao transacao = new Transacao();
                transacao.setCriacao(hoje);
                transacao.setDadosBancarios(orcamento.getDadosBancarios());
                transacao.setDescricao(orcamento.getDescricao());
                transacao.setModulo(Modulos.FINANCEIRO);
                transacao.setMulta(0.0);
                transacao.setPagamento(null);
                transacao.setStatus(StatusTransacao.PENDENTE);
                transacao.setTipo(TipoTransacao.PAGAMENTO);
                transacao.setUsuario(null);
                transacao.setValor(orcamento.getValorTotal());
                transacao.setVencimento(hoje);

                SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
                String vencimento = format.format(transacao.getVencimento());
                try {
                    TransacaoDAO.cadastrar(transacao.getDadosBancarios().getId().toString(), transacao.getTipo(), true, transacao.getDescricao(), vencimento, transacao.getValor(), transacao.getMulta(), Modulos.FINANCEIRO);
                } catch (Exception ex) {
                    Logger.getLogger(VerificadorDeTransacoes.class.getName()).log(Level.SEVERE, null, ex);
                }
             }
        }

    }
}
